const fp = require('lodash/fp');
const cars = [
    {
        name: 'Ferrari FF',
        horsepower: 660,
        dollar_value: 700000,
        in_stock: true
    },
    {
        name: 'Spyker C12 Zagato',
        horsepower: 650,
        dollar_value: 648000,
        in_stock: false
    },
    {
        name: 'Jaguar XKR-S',
        horsepower: 550,
        dollar_value: 132000,
        in_stock: false
    }
];

// 练习1: 使用函数组合 fp.flowRight ()重新实现下面这个函数

let isLastlnStock = fp.flowRight(fp.prop('in_stock'), fp.last);
console.log('isLastlnStock: ', isLastlnStock(cars));

// 练习2: 使用 fp.flowRight() 、 fp.prop() 和 fp.first() 获取第一个 car 的 name

let firstCarName = fp.flowRight(fp.prop('name'),fp.first);
console.log(firstCarName(cars));

// 练习3: 使用帮助函数 _average 重构averageDollarValue ,使用函数组合的方式实现

let  _average = function (xs){
    return fp.reduce(fp.add,0,xs) / xs.length
}
let averageDollarValue = function(cars){
   let arr = fp.flowRight(_average,fp.map(car=>car.dollar_value))
   return arr(cars)
}

// 练习4: 使用 flowRight  写一个 sanitizeNames ()函数，返回一个下划线连接的小写字符串，把数组中的 name 转换为这种形式：例如：sanitizeNames(["Hello World"]) => ["hello_world"]
let _underscore = fp.replace(/\W+/g,"_");
let sanitizeNames = () => (fp.flowRight(fp.map(name=>_underscore(name))));
console.log(sanitizeNames()(['hello world']));